03. 分支
现在该学习强大的分支功能了!git 中的分支非常灵活,使你能够实现一些很强大的功能。在详细了解一些具体的命令之前,我们先从宏观层面了解下什么是分支以及它们的工作方式。
Nd016 WebND Ud123 Gitcourse BETAMOJITO L5 26 分支概述
这就是分支的工作原理以及如何在分支之间切换的概述。其实你已经在命令行上见过 master 分支了。因为你在第一节课进行了文件设置,因此命令行中显示了当前分支。
终端在提示符中显示了当前分支。当前分支是"master"分支。
git branch
命令
git branch
命令用来与 git 的分支进行交互:
$ git branch
它可以用来:
-
列出仓库中的所有分支名称
-
创建新的分支
-
删除分支
如果我们只输入
git branch
,则 git 将列出仓库中的分支:
终端显示了
git branch
命令的输出结果,并显示了 master 分支。
## 创建分支
要创建分支,只需使用
git branch
并提供要创建的分支对应的名称。因此,如果你想创建一个叫做"sidebar"的分支,只需运行以下命令:
$ git branch sidebar
提示符改变了吗?
SOLUTION:
master
git checkout
命令
注意,在进行 commit 时,该 commit 将添加到当前分支上。虽然我们创建了新的
sidebar
分支,但是没有向其添加新的 commit,因为我们尚未切换到该分支。如果我们现在进行 commit 的话,该 commit 将添加到
master
分支,而不是
sidebar
分支。我们已经在演示中看到这一情况,要在分支之间进行切换,我们需要使用 git 的
checkout
命令。
$ git checkout sidebar
请务必了解该命令的工作方式。运行该命令将:
-
从工作目录中删除 git 跟踪的所有文件和目录
- (git 跟踪的文件存储在仓库中,因此什么也不会丢失)
-
转到仓库,并提取分支指向的 commit 所对应的所有文件和目录
因此此命令将删除 master 分支中的 commit 引用的所有文件。它会将这些文件替换为 sidebar 分支中的 commit 引用的文件。理解这一部分十分重要,所以请务必多读几遍工作方式。
有趣的是,
sidebar
和
master
都指向同一 commit,因此当你在这两个分支之间切换时,看起来什么也没变。但是提示符现在会显示"sidebar":
终端在提示符中显示了"sidebar"分支。
## 日志中的分支
提示符中的分支信息很有用,但是最清晰的查看方式是查看
git log
的输出结果。就像我们需要使用
--decorate
选项来显示 git 标签一样,我们也需要该选项来显示分支。
$ git log --oneline --decorate
我的日志输出结果如下所示(你的可能不太一样,取决于你提交的 commit):
终端显示了
git log --oneline --decorate
命令的输出结果。单词"HEAD"具有一个指向"sidebar"的箭头,后者是当前分支。
在上述输出中,注意我们之前见到的特殊指示符"HEAD"具有一个指向 sidebar 分支的箭头。它指向 sidebar 是因为 sidebar 分支是当前分支,现在提交的任何 commit 将添加到 sidebar 分支。
活跃分支
提示符将显示活跃分支。但这是我们对提示符进行的特殊自定义,如果你使用的是不同的计算机,判断活跃分支的最快速方式是查看
git branch
命令的输出结果。活跃分支名称旁边会显示一个星号。
终端显示了
git branch
命令的输出结果。活跃分支(这里是 "sidebar"分支)旁边有一个星号。
在某一位置创建 git 分支
SOLUTION:
将创建 `alt-sidebar-loc` 分支并使其指向 SHA 为 `42a69f` 的 commit哪个分支是活跃分支?
QUESTION:
假设
git branch
的输出如下所示:
$ git branch
barbara
* footer-fix
master
richard
sidebar
social-icons
哪个分支是活跃分支?
SOLUTION:
NOTE: The solutions are expressed in RegEx pattern. Udacity uses these patterns to check the given answer
## 删除分支
分支用来进行开发或对项目进行修正,不会影响到项目(因为更改是在分支上进行的)。在分支上做出更改后,你可以将该分支组合到
master
分支上(这种“分支组合过程”叫做“合并”(merge),稍后将详细讲解)
合并了分支的更改后,你可能不再需要该分支了。如果你想删除分支,可以使用
-d
选项。下面的命令包含
-d
选项,告诉 git 删掉给出的分支(这里是"sidebar"分支)。
$ git branch -d sidebar
注意,无法删除当前所在的分支。因此要删除
sidebar
分支,你需要切换到
master
分支,或者创建并切换到新的分支。
删除内容让人比较紧张。但是不用担心。如果某个分支上有任何其他分支上都没有包含的 commit(也就是这个 commit 是要被删除的分支独有的),git 不会删除该分支。如果你创建了
sidebar
分支,向其添加了 commit,然后尝试使用
git branch -d sidebar
删除该分支,git 不会让你删除该分支,因为你无法删除当前所在的分支。如果你切换到
master
分支并尝试删除
sidebar
分支,git 也不会让你删除,因为
sidebar
分支上的新 commit 会丢失!要强制删除,你需要使用大写的 D 选项 -
git branch -D sidebar
。